#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Datetime: 2020/12/31 下午5:40
# @Author  : HUANG Xiong
# @Site    : 
# @File    : macro_info.py
# @Software: PyCharm 

"""
脚本说明：宏观指标的基本信息
"""
import pandas as pd
from quant_researcher.quant.project_tool.db_operator import db_conn, my_mysql
from quant_researcher.quant.project_tool.logger.my_logger import LOG
from quant_researcher.quant.project_tool.celebrity import get_lst_condition

T_INDIC_INFO = 'indicinfo_define'
T_INDIC_INFO_JY = 'indicator_main'
T_INDIC_TREE_JY = 'indicator_tree'


def get_indicator_tree(indic_code=None, indic_name=None,
                       is_parent=False, select=None, tdatachannel=None):
    """
    查询宏观指标的树形目录结构，使用聚源的表

    :param str or list or None indic_code: 指标代码，支持单个（str）、多个（list）和所有（None）
    :param str indic_name: 指标名称，支持模糊查询
    :param bool is_parent: 是否是父节点，若是，则返回parent_code=indic_code的所有结果
    :param list select: 需要查询哪些字段
    :param str tdatachannel: 需要指定的指标类型。None-不指定，特殊的，null-指定为null的
    :return: pd.DataFrame
                - indic_code: 指标代码
                - indic_name: 节点名称
                - node_abbr: 节点简称
                - chi_spelling: 拼音简称
                - node_abbr_en: 节点简称(英文)
                - parent_code: 父节点代码
                - brother_no: 同一层级序号
                - layers: 层级深度
                - node_category: 节点类型 0-根节点；1-中间节点；2-叶节点
                - catalog_stru: 节点目录结构

    """
    # 指标代码和指标名称都不为空时，则只根据指标代码进行查询
    if indic_code is not None and indic_name is not None:
        indic_name = None

    if select is None:
        select = ['indic_code', 'indic_name', 'indic_abbr', 'chi_spelling',
                  'indic_abbr_en', 'parent_code', 'brother_no', 'layers',
                  'node_category', 'catalog_stru']

    where = []

    if indic_code is not None:
        if is_parent:
            where_code = 'parent_code'
        else:
            where_code = 'indic_code'
        if isinstance(indic_code, str):
            where.append(f'{where_code}=\'{indic_code}\'')
        elif isinstance(indic_code, list):
            where.append(get_lst_condition(indic_code, where_code))
        else:
            LOG.error('目前indic_code只支持str、list，请按要求输入')
            raise NotImplementedError

    if indic_name is not None:
        where.append(f"indic_name like '%{indic_name}%'")

    if tdatachannel is not None:
        if tdatachannel == 'null':
            where.append('tdatachannel is null')
        else:
            where.append(f"tdatachannel = '{tdatachannel}'")

    where.append('node_state = 1')

    conn = db_conn.get_stock_conn()
    df = my_mysql.read_v2(select=select, where=where, sfrom=T_INDIC_TREE_JY, conn=conn)
    conn.close()

    if df.empty:
        LOG.error(f"没有找到{indic_code if indic_code is not None else indic_name}的指标信息")
        return

    return df


def get_indicator_info(indic_code=None, indic_name=None,
                       is_parent=False, select=None, tdatachannel=None):
    """
    查询宏观指标的基本信息，使用聚源的表

    :param str or list or None indic_code: 指标代码，支持单个（str）、多个（list）和所有（None）
    :param str indic_name: 指标名称，支持模糊查询
    :param bool is_parent: 是否是父节点，若是，则返回parent_code=indic_code的所有结果
    :param list select: 需要查询哪些字段
    :param str tdatachannel: 需要指定的指标类型。None-不指定，特殊的，null-指定为null的
    :return: pd.DataFrame
                - indic_code: 指标代码
                - indic_name: 指标名称
                - indic_name_en: 指标名称(英文)
                - info_source_code: 信息来源代码
                - info_source: 信息来源
                - power_number: 量纲系数
                - indic_dimension: 指标维度
                - indic_category: 指标类别
                - data_proc_cateory: 数据处理类别
                - indic_state: 指标状态，1-有效，5-终止
                - begin_date: 起始日期
                - end_date: 截止日期(最新日期)
                - unit: 单位
                - unit_report: 单位(披露)
                - frequency: 数据披露频率
                - tdatachannel: 指标类型

    """
    # 指标代码和指标名称都不为空时，则只根据指标代码进行查询
    if indic_code is not None and indic_name is not None:
        indic_name = None

    if select is None:
        select = ['indic_code', 'indic_name', 'indic_name_en', 'info_source_code',
                  'info_source', 'power_number', 'indic_dimension', 'indic_category',
                  'data_proc_cateory', 'indic_state', 'begin_date', 'end_date',
                  'unit', 'unit_report', 'frequency', 'tdatachannel']

    where = []

    if indic_code is not None:
        if is_parent:
            indic_code = get_indicator_tree(indic_code, is_parent=True,
                                            select=['indic_code'], tdatachannel=tdatachannel)
            if indic_code is None:
                return
            else:
                indic_code = indic_code['indic_code'].tolist()
        if isinstance(indic_code, str):
            where.append(f'indic_code = \'{indic_code}\'')
        elif isinstance(indic_code, list):
            where.append(get_lst_condition(indic_code, 'indic_code'))
        else:
            LOG.error('目前indic_code只支持str、list，请按要求输入')
            raise NotImplementedError

    if indic_name is not None:
        where.append(f"indic_name like '%{indic_name}%'")

    if tdatachannel is not None:
        if tdatachannel == 'null':
            where.append('tdatachannel is null')
        else:
            where.append(f"tdatachannel = '{tdatachannel}'")

    conn = db_conn.get_stock_conn()
    df = my_mysql.read_v2(select=select, where=where, sfrom=T_INDIC_INFO_JY, conn=conn)
    conn.close()

    if df.empty:
        LOG.error(f"没有找到{indic_code if indic_code is not None else indic_name}的指标信息")
        return

    return df


def get_indicator_info_and_tree(indic_code=None, indic_name=None,
                                is_parent=False, tdatachannel=None):
    """
    将宏观指标基本信息和树状结构合并后输出，一般用于fof的实时接口

    :param str or list or None indic_code: 指标代码，支持单个（str）、多个（list）和所有（None）
    :param str indic_name: 指标名称，支持模糊查询
    :param bool is_parent: 是否是父节点，若是，则返回parent_code=indic_code的所有结果
    :param str tdatachannel: 需要指定的指标类型。None-不指定，特殊的，null-指定为null的
    :return: pd.DataFrame
                - indic_code: 指标代码
                - indic_name: 指标名称
                - info_source: 信息来源
                - unit: 单位
                - unit_report: 单位(披露)
                - frequency: 数据披露频率
                - indic_state: 指标状态，1-有效，5-终止
                - parent_code: 父节点代码
                - layers: 层级深度
                - node_category: 节点类型 0-根节点；1-中间节点；2-叶节点
                - brother_no: 同级节点编号
    """
    info_df = get_indicator_info(indic_code, indic_name, is_parent,
                                 select=['indic_code', 'info_source', 'unit', 'unit_report',
                                         'frequency', 'indic_state'], tdatachannel=tdatachannel)
    if info_df is None:
        info_df = pd.DataFrame(columns=['indic_code', 'info_source', 'unit',
                                        'unit_report', 'frequency', 'indic_state'])
    tree_df = get_indicator_tree(indic_code, indic_name, is_parent,
                                 select=['indic_code', 'indic_name', 'parent_code',
                                         'layers', 'node_category', 'brother_no'],
                                 tdatachannel=tdatachannel)
    if tree_df is None:
        return
    df = info_df.merge(tree_df, how='outer', on='indic_code')
    df['indic_code'] = df['indic_code'].astype(str)
    nan_df = df[df['parent_code'].isnull()]
    if not nan_df.empty:
        df2 = df[df['parent_code'].notnull()]
        df2['parent_code'] = df2['parent_code'].astype(str).str[:13]
        df = pd.concat([nan_df, df2])

    df = df.where(df.notnull(), None)

    return df


def get_indicator_code_by_name(indic_name):
    """
    根据指标名称查询指标代码，必须精准匹配

    :param str or list indic_name: 指标名称，必须准确匹配, 指标名称一个或多个
    :return: indicator_code_list
    """
    if isinstance(indic_name, str):
        indic_name = [indic_name]

    all_indicator_code_list = []
    for indic in indic_name:
        indicator_info = get_indicator_info(indic_name=indic, select=['indic_code', 'indic_name'])
        if indicator_info is None:
            LOG.error(f"模糊查询没有找到{indic}的指标代码信息，请检查该指标是否存在")
            return
        if indic not in list(indicator_info['indic_name']):
            LOG.error(f"没有找到{indic}的指标代码信息，请检查该指标是否存在")
            return

        indicator_code = indicator_info['indic_code'][indicator_info['indic_name'] == indic]
        indicator_code = str(indicator_code.values[0])

        all_indicator_code_list.append(indicator_code)

    return all_indicator_code_list


def get_indicator_code_by_nameV2(indic_name):
    """
    根据指标名称查询指标代码，必须精准匹配

    :param str or list indic_name: 指标名称，必须准确匹配, 指标名称一个或多个
    :return: indicator_code_list
    """
    if isinstance(indic_name, str):
        indic_name = [indic_name]

    all_indicator_code_dict = dict()
    for indic in indic_name:
        indicator_info = get_indicator_info_old(indic_name=indic, select=['indic_code', 'indic_name'])
        if indicator_info is None:
            LOG.error(f"模糊查询没有找到{indic}的指标代码信息，请检查该指标是否存在")
            all_indicator_code_dict[indic] = None
            continue
        elif indic not in list(indicator_info['indic_name']):
            LOG.error(f"没有找到{indic}的指标代码信息，请检查该指标是否存在")
            all_indicator_code_dict[indic] = None
            continue
        else:
            indicator_code = indicator_info['indic_code'][indicator_info['indic_name'] == indic]
            indicator_code = str(indicator_code.values[0])
            all_indicator_code_dict[indic] = indicator_code

    return pd.Series(all_indicator_code_dict)


def get_indicator_info_old(indic_code=None, indic_name=None,
                       is_parent=False, select=None, tdatachannel=None):
    """
    查询宏观指标的基本信息（数据来源为爬取萝卜投研网站，已弃用，目前数据源为聚源）

    :param str or list or None indic_code: 指标代码，支持单个（str）、多个（list）和所有（None）
    :param str indic_name: 指标名称，支持模糊查询
    :param bool is_parent: 是否是父节点，若是，则返回parent_code=indic_code的所有结果
    :param list select: 需要查询哪些字段
    :param str tdatachannel: 需要指定的指标类型。None-不指定，特殊的，null-指定为null的
    :return: pd.DataFrame
                - indic_code: 指标代码
                - indic_name: 指标名称
                - parent_code: 父级指标代码
                - is_dir: 是否目录，1=是，没有指标值; 0=否，有指标值
                - frequency: 发布频率
                - unit: 数值单位
                - country: 国家
                - region: 地区
                - layers: 指标层级
                - info_source 指标来源
                - tdatachannel: 指标类型
    """

    # 指标代码和指标名称都不为空时，则只根据指标代码进行查询
    if indic_code is not None and indic_name is not None:
        indic_name = None

    if select is None:
        select = ['indic_code', 'indic_name', 'parent_code', 'is_dir',
                  'frequency', 'unit', 'country', 'region', 'layers',
                  'info_source', 'tdatachannel', 'tid']

    where = []

    if indic_code is not None:
        if is_parent:
            where_code = 'parent_code'
        else:
            where_code = 'indic_code'
        if isinstance(indic_code, str):
            where.append(f'{where_code}=\'{indic_code}\'')
        elif isinstance(indic_code, list):
            where.append(get_lst_condition(indic_code, where_code))
        else:
            LOG.error('目前indic_code只支持str、list，请按要求输入')
            raise NotImplementedError

    if indic_name is not None:
        where.append(f"indic_name like '%{indic_name}%'")

    if tdatachannel is not None:
        if tdatachannel == 'null':
            where.append('tdatachannel is null')
        else:
            where.append(f"tdatachannel = '{tdatachannel}'")

    where.append('tdatastate = 0')

    conn = db_conn.get_stock_conn()
    df = my_mysql.read_v2(select=select, where=where, sfrom=T_INDIC_INFO, conn=conn)
    conn.close()

    if df.empty:
        LOG.error(f"没有找到{indic_code if indic_code is not None else indic_name}的指标信息")
        return

    return df


GDP_indic = ['GDP:不变价:累计同比', 'GDP:不变价:第一产业:累计同比', 'GDP:不变价:第二产业:累计同比',
             'GDP:不变价:第三产业:累计同比', 'GDP:环比:季调', '人均GDP:不变价:增速', 'GDP平减指数:累计同比']

industry_indic = ['工业增加值:环比:季调', '工业增加值:国有及国有控股企业:当月同比',
                  '工业增加值:私营企业:当月同比', '出口交货值:当月同比', '产品销售率:当月同比',
                  '工业增加值:采矿业:当月同比', '工业增加值:电力、热力、燃气及水生产和供应业:当月同比',
                  '产量:焦炭:当月同比', '发电量:当月同比', '产量:原油:当月同比', '产量:天然气:当月同比',
                  '产量:塑料制品:当月同比', '产量:生铁:当月同比', '产量:水泥:当月同比', '产量:汽车:当月同比',
                  '产量:微型电子计算机:当月同比', '发电量:核能:当月同比', '发电量:风力:当月同比']

currency_indic = ['M0:同比', 'M1:同比', 'M2:同比', '金融机构:人民币:各项存款余额:同比']

price_indic = ['CPI:居住:当月同比', 'CPI:交通和通信:当月同比', 'CPI:医疗保健:当月同比', 'CPI:衣着:当月同比',
               'CPI:服务:当月同比', 'CPI:消费品:当月同比', 'CPI:非食品:当月同比', 'CPI:食品:当月同比']

fix_invest_indic = ['固定资产投资完成额:当月同比', '房地产开发投资完成额:当月同比',
                    '基础设施投资(不含电气水供应业):累计同比', '全社会固定资产投资完成额:增速',
                    '全社会住宅投资:房地产', '全社会固定资产投资完成额:第一产业']

im_export_indic = ['出口金额(美元):当月同比', '进口金额(美元):当月同比', '贸易顺差(美元):当月同比',
                   '出口货运量:当月同比', '贷方(人民币):国际货物贸易:当月值', '贷方(人民币):国际服务贸易:当月值',
                   '银行代客结售汇差额(美元):当月值']

assumption_indic = ['社会消费品零售总额:当月值', '社会消费品零售总额:城镇:当月值',
                    '社会消费品零售总额:农村:当月值', '社会消费品零售总额:商品零售:当月值',
                    '社会消费品零售总额:餐饮收入:当月值', '网上零售额:累计同比',
                    '网上零售额:实物商品:累计同比', '网上零售额:实物商品:占社会消费品零售总额的比重',
                    '批发零售业(年)', '批发和零售业:法人企业', '批发和零售业:年末从业人数', '批发和零售业:商品购进额',
                    '批发和零售业:进口额', '批发和零售业:商品销售额', '批发和零售业:出口额', '批发和零售业:期末商品库存额',
                    '住宿和餐饮业:法人企业个数', '住宿和餐饮业:营业额', '住宿和餐饮业:餐费收入', '住宿和餐饮业:年末餐饮营业面积',
                    '住宿业:客房收入', '住宿业:餐费收入', '住宿业:餐饮营业面积']

balance_payment_indic = ['经常账户(人民币):差额', '经常账户(人民币):货物和服务:差额', '经常账户(人民币):初次收入:差额',
                         '经常账户(人民币):二次收入:差额', '资本账户(人民币):差额', '金融账户(人民币):差额',
                         '金融账户(人民币):非储备性质的金融账户']

employ_indic = ['城镇新增就业人数:累计值', '城镇失业人员再就业人数:累计值', '就业困难人员就业人数:累计值',
                '岗位空缺与求职人数比', '城镇调查失业率:同比增减', '城镇就业人员:周平均工作时间']

finance_indic = ['社会融资规模增量:当月值', '社会融资规模增量:委托贷款:当月值',
                 '社会融资规模增量:信托贷款:当月值', '金融机构:人民币:各项贷款余额:同比',
                 '金融机构:新增人民币贷款:当月值', '金融机构:新增人民币贷款:短期贷款及票据融资:当月值',
                 '金融机构:外汇:各项贷款余额:同比', '社会融资规模增量:企业债券融资:当月值', '债券发行额:国债',
                 '债券发行额:金融债', '债券期末余额:金融债', '债券发行额:公司信用类债券(企业债)',
                 '债券期末余额:公司信用类债券(企业债)', '债券发行额:地方政府债:累计值',
                 '债券发行额:央行票据:累计值', '债券发行额:商业银行债券:累计值']

interest_indic = ['法定存款准备金利率', '超额存款准备金利率', '大额美元存款利率:3-6月',
                  '大额美元存款利率:6-12月', '对金融机构贷款利率:20天以内', '对金融机构贷款利率:3月以内',
                  '再贴现利率', '对金融机构贷款利率:6月以内', '对金融机构贷款利率:1年', 'LPR:1年',
                  'LPR:5年', '中长期贷款利率:5年以上', '短期贷款利率:1年以内(含)', '货币型基金:平均收益率',
                  '中债国债到期收益率:6月', '中债国债到期收益率:1年', '中债国债到期收益率:5年',
                  '中债国债到期收益率:30年', '中债企业债(AA)与国债利差:1年', '中债企业债(AA)与国债利差:3年',
                  '中债企业债(AA)与国债利差:5年', '中债中资美元债到期收益率(A+):1年',
                  '中债中资美元债到期收益率(A+):6月', '中债中资美元债到期收益率(A+):10年',
                  '定期存款利率:1年(整存整取)', '定期存款利率:3月(整存整取)', '定期存款利率:6月(整存整取)']

prosperity_indic = ['制造业PMI', '制造业PMI:新订单', '制造业PMI:新出口订单', '非制造业PMI:新订单',
                    '非制造业PMI:新出口订单', '非制造业PMI:在手订单', '非制造业PMI:存货', '非制造业PMI:建筑业',
                    '非制造业PMI:服务业', 'EPMI', 'EPMI:生产量', 'EPMI:自有库存', 'EPMI:就业',
                    'EPMI:研发活动', '宏观经济景气指数:一致指数:环比', '宏观经济景气指数:先行指数:环比',
                    '宏观经济景气指数:滞后指数:环比', '国房景气指数', '企业景气指数', '消费者预期指数',
                    '消费者满意指数', '消费者信心指数', '企业家信心指数', '经济学家信心指数',
                    '企业家信心指数:工业', '企业家信心指数:建筑业', '企业家信心指数:房地产业',
                    'CII:总指数', 'CII:创新投入指数', 'CII:创新环境指数', 'CII:创新产出指数']

industry_eco_indic = ['收入增长率:煤炭开采和洗选业', '收入增长率:石油和天然气开采业', '收入增长率:黑色金属矿采选业',
                      '收入增长率:有色金属矿采选业', '收入增长率:非金属矿采选业',
                      '收入增长率:食品制造业', '收入增长率:家具制造业', '收入增长率:金属制品业',
                      '收入增长率:铁路、船舶、航空航天和其他运输设备制造业', '资本保值增值率:煤炭开采和洗选业',
                      '资本保值增值率:石油和天然气开采业', '资本保值增值率:黑色金属矿采选业',
                      '资本保值增值率:有色金属矿采选业', '资本保值增值率:非金属矿采选业', '资本保值增值率:食品制造业',
                      '资本保值增值率:家具制造业', '资本保值增值率:金属制品业',
                      '资本保值增值率:通信设备、计算机及其他电子设备制造业']

# 月度数据列表
monthly_factor_list1 = ['工业增加值:国有及国有控股企业:当月同比', '工业增加值:私营企业:当月同比',
                        '出口交货值:当月同比', '产品销售率:当月同比', '产量:焦炭:当月同比', '发电量:当月同比',
                        '产量:原油:当月同比', '产量:天然气:当月同比', '产量:塑料制品:当月同比',
                        '产量:生铁:当月同比', '产量:水泥:当月同比', '产量:汽车:当月同比', '产量:微型电子计算机:当月同比',
                        '发电量:核能:当月同比', '发电量:风力:当月同比', 'M0:同比', 'M1:同比', 'M2:同比',
                        '金融机构:人民币:各项存款余额:同比', 'CPI:居住:当月同比', 'CPI:交通和通信:当月同比',
                        'CPI:医疗保健:当月同比', 'CPI:衣着:当月同比', 'CPI:服务:当月同比', 'CPI:消费品:当月同比',
                        'CPI:非食品:当月同比', 'CPI:食品:当月同比', '固定资产投资完成额:当月同比', '房地产开发投资完成额:当月同比',
                        '社会融资规模增量:当月值', '社会融资规模增量:委托贷款:当月值', '社会融资规模增量:信托贷款:当月值',
                        '金融机构:人民币:各项贷款余额:同比', '金融机构:新增人民币贷款:当月值',
                        '金融机构:新增人民币贷款:短期贷款及票据融资:当月值', '金融机构:外汇:各项贷款余额:同比',
                        '社会融资规模增量:企业债券融资:当月值', '出口金额(美元):当月同比', '进口金额(美元):当月同比',
                        '贸易顺差(美元):当月同比', '大额美元存款利率:3-6月', '大额美元存款利率:6-12月', '货币型基金:平均收益率',
                        '中债国债到期收益率:6月', '中债国债到期收益率:1年', '中债国债到期收益率:5年', '中债国债到期收益率:30年',
                        '中债企业债(AA)与国债利差:1年', '中债企业债(AA)与国债利差:3年', '中债企业债(AA)与国债利差:5年',
                        '制造业PMI', '制造业PMI:新订单', '制造业PMI:新出口订单', '非制造业PMI:新订单',
                        '非制造业PMI:新出口订单', '非制造业PMI:在手订单', '非制造业PMI:存货', '非制造业PMI:建筑业',
                        '宏观经济景气指数:一致指数:环比', '宏观经济景气指数:先行指数:环比', '宏观经济景气指数:滞后指数:环比',
                        '国房景气指数', '消费者预期指数', '消费者满意指数', '消费者信心指数', '社会消费品零售总额:当月值',
                        '社会消费品零售总额:商品零售:当月值', '社会消费品零售总额:餐饮收入:当月值']
monthly_factor_list2 = ['工业生产指数', '服务业生产指数:当月同比', '规模以上服务业企业营业收入:当月同比',
                        '克强指数:当月值',
                        # 部分数据呈现上升或者下降的趋势，导致数据不平稳
                        '工业增加值:煤炭开采和洗选业:当月同比', '工业增加值:当月同比',
                        '工业增加值:黑色金属矿采选业:当月同比', '工业增加值:有色金属矿采选业:当月同比',
                        '工业增加值:烟草制品业:当月同比', '工业增加值:食品制造业:当月同比',
                        '工业增加值:酒、饮料和精制茶制造业:当月同比', '工业增加值:烟草制品业:当月同比',
                        '工业增加值:纺织业:当月同比', '工业增加值:家具制造业:当月同比',
                        '工业增加值:造纸及纸制品业:当月同比', '工业增加值:金属制品业:当月同比',
                        '工业增加值:通用设备制造业:当月同比', '工业增加值:专用设备制造业:当月同比',
                        '工业增加值:汽车制造业:当月同比', '工业增加值:仪器仪表制造业:当月同比',
                        '产品销售率:当月同比',
                        # 有明显的年度周期性，同时呈现上升或者下降趋势
                        '出口交货值:当月值', '出口交货值:煤炭开采和洗选业:当月值',
                        '出口交货值:有色金属矿采选业:当月值', '出口交货值:开采辅助活动:当月值',
                        '出口交货值:农副食品加工业:当月值', '出口交货值:食品制造业:当月值',
                        '出口交货值:烟草制品业:当月值', '出口交货值:纺织业:当月值',
                        '出口交货值:家具制造业:当月值', '出口交货值:医药制造业:当月值',
                        '出口交货值:汽车制造业:当月值',
                        '工业企业:产成品存货周转天数:采矿业', '工业企业:产成品存货周转天数:制造业',
                        '工业企业:产成品存货周转天数:国有控股企业', '工业企业:产成品存货周转天数:国有控股企业',
                        #
                        '工业企业:亏损企业数:累计同比', '工业企业:流动资产合计:累计同比',
                        '工业企业:利润总额:累计同比', '工业企业:销售费用:累计同比', '工业企业:营业利润:累计同比',
                        '国有及国有控股企业:营业总收入:累计同比', '国有及国有控股企业:利润总额:累计同比',
                        '国有及国有控股企业:应交税金:累计同比', '国有及国有控股企业:营业总成本:累计同比',
                        # 保值率数据使用差分计算保值率的变化来进行平稳化
                        '资本保值增值率:煤炭开采和洗选业', '资本保值增值率:石油和天然气开采业',
                        '资本保值增值率:黑色金属矿采选业', '资本保值增值率:农副食品加工业',
                        '资本保值增值率:食品制造业', '资本保值增值率:纺织业', '资本保值增值率:造纸及纸制品业',
                        # 资金利税率有年度周期效应，进行12期移动平均和差分
                        '资金利税率:煤炭开采和洗选业', '资金利税率:石油和天然气开采业', '资金利税率:食品制造业',
                        '资金利税率:家具制造业', '资金利税率:家具制造业', '资金利税率:金属制品业',
                        '资金利税率:通用设备制造业',
                        # 毛利率有年度周期效应，进行12期移动平均和差分
                        '毛利率:煤炭开采和洗选业', '毛利率:石油和天然气开采业',
                        '毛利率:农副食品加工业', '毛利率:纺织业', '毛利率:食品制造业', '毛利率:家具制造业',
                        '毛利率:医药制造业', '毛利率:化学纤维制造业', '毛利率:通用设备制造业', '毛利率:汽车制造业',
                        # 同比数据呈现平稳状态
                        '利润总额:煤炭开采和洗选业:累计同比', '利润总额:黑色金属矿采选业:累计同比',
                        '利润总额:农副食品加工业:累计同比', '利润总额:食品制造业:累计同比',
                        '利润总额:纺织业:累计同比', '利润总额:家具制造业:累计同比', '利润总额:医药制造业:累计同比',
                        '利润总额:纺织服装、服饰业:累计同比', '利润总额:汽车制造业:累计同比',
                        '流动资产合计:煤炭开采和洗选业:累计同比', '流动资产合计:石油和天然气开采业:累计同比',
                        '流动资产合计:开采辅助活动:累计同比', '流动资产合计:食品制造业:累计同比',
                        '流动资产合计:酒、饮料和精制茶制造业:累计同比', '流动资产合计:纺织业:累计同比',
                        '流动资产合计:纺织服装、服饰业:累计同比', '流动资产合计:家具制造业:累计同比',
                        '流动资产合计:造纸和纸制品业:累计同比', '流动资产合计:医药制造业:累计同比',
                        '流动资产合计:化学纤维制造业:累计同比', '流动资产合计:橡胶和塑料制品业:累计同比',
                        # 年度累计，使用12期移动平均
                        '利润总额:煤炭开采和洗选业:累计值', '利润总额:石油和天然气开采业:累计值',
                        '利润总额:农副食品加工业:累计值', '利润总额:烟草制品业:累计值', '利润总额:食品制造业:累计值',
                        '利润总额:家具制造业:累计值', '利润总额:医药制造业:累计值', '利润总额:汽车制造业:累计值',
                        '利润总额:仪器仪表制造业:累计值',
                        # 信心指数呈现平稳
                        '投资者信心指数', '投资者信心指数:股票估值',
                        '投资者信心指数:大盘乐观', '投资者信心指数:大盘反弹', '投资者信心指数:大盘抗跌',
                        '长江商学院BCI',
                        # 指数越低代表金融环境越宽松，条件指数进行一阶来代表金融环境的变化
                        '第一财经研究院中国金融条件指数',
                        #  增速以及当月同比数据呈现平稳
                        'CPI:食品:增速', 'CPI:非食品:增速', '城市CPI:增速', '农村CPI:增速', 'CPI:衣着:增速',
                        'CPI:居住:增速', 'CPI:医疗保健:增速', 'CPI:娱乐教育文化用品及服务:增速',
                        'CPI:交通和通信:增速', 'PPI:当月同比', 'PPI:生产资料:当月同比', 'PPI:生活资料:当月同比',
                        'PPI:增速', 'PPI:生产资料:增速', 'PPI:生活资料:增速', 'CGPI:总指数:当月同比',
                        'CGPI:农产品:当月同比', 'CGPI:矿产品:当月同比', 'CGPI:煤油电:当月同比',
                        '通货膨胀率', '全国一般公共预算收入:合计:当月同比', '全国一般公共预算收入:中央收入:当月同比',
                        '全国一般公共预算收入:地方本级收入:当月同比', '全国一般公共预算收入:税收收入:当月同比',
                        '全国一般公共预算收入:税收收入:当月同比', '全国一般公共预算收入:非税收入:当月同比',
                        '税收收入:关税:当月同比', '税收收入:个人所得税:当月同比', '税收收入:国内消费税:当月同比',
                        '税收收入:企业所得税:当月同比', '税收收入:车辆购置税:当月同比',
                        '税收收入:城市维护建设税:当月同比', '税收收入:房产税:当月同比', '税收收入:耕地占用税:当月同比',
                        '全国一般公共预算支出:教育:当月同比', '全国一般公共预算支出:地方支出:当月同比',
                        '全国一般公共预算支出:文化体育与传媒:当月同比', '全国一般公共预算支出:社会保障和就业:当月同比',
                        '全国一般公共预算支出:医疗卫生:当月同比', '全国一般公共预算支出:环境保护:当月同比',
                        '全国一般公共预算支出:城乡社区事务:当月同比', '全国一般公共预算支出:交通运输:当月同比',
                        # 当月值非平稳，呈现明显的逐渐上升趋势，可以使用差分进行平稳化
                        '彩票销售额:体育彩票:当月值', '彩票销售额:当月值',
                        # 明显的年度周期，采用12期移动平均
                        '中央政府融资:合计:当月值',
                        # 呈现明显逐步上升，使用差分
                        '债务余额:地方政府债:累计值', '货币和准货币', '国内信贷', '准货币:单位定期存款',
                        '准货币:个人存款', '债券',
                        # 在部分年份附近有明显增加，导致序列不平稳，可以使用移动平均和差分
                        '基础货币余额:同比', '社会融资规模增量:当月同比',
                        '金融机构:人民币:各项存款余额:同比', '金融机构:人民币:各项贷款余额:同比',
                        '金融机构:外汇:各项存款余额:同比', '金融机构:外汇:各项贷款余额:同比',
                        # 差额的变化更能反应经济状况的变化，因此采用差分
                        '银行代客结售汇差额(美元):当月值',
                        # 资产具有明显的趋势，采用差分的方法来平稳化
                        '货币当局:资产:国外资产', '货币当局:资产:国外资产:外汇', '货币当局:资产:国外资产:黄金',
                        '货币当局:资产:总资产', '货币当局:负债:储备货币', '货币当局:负债:债券发行',
                        '其他存款性公司:资产:国外资产', '其他存款性公司:资产:储备资产', '其他存款性公司:资产:对政府债权',
                        '货币净投放量',
                        # 差分
                        '银行间货币市场成交金额:同业拆借',
                        '银行间货币市场成交金额:质押式回购', '银行间货币市场成交金额:买断式回购']

if __name__ == '__main__':
    # aaa = get_indicator_code_by_name('居民居住消费价格指数CPI_(上年=100)_当月')
    # bbb = get_indicator_info('1000110002779')
    # ccc = get_indicator_code_by_nameV2(['居民居住消费价格指数CPI_(上年=100)_当月'])
    # ddd = get_indicator_tree('1000110002779')
    eee = get_indicator_info_and_tree('1000110002779')
